/**
** @version 1.0
** @package FACTURAPYMES.
* @author Jorge Washington Mueses Cevallos.
* @copyright Copyright (C) 2011 por Jorge Mueses. Todos los derechos reservados.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL.
** FACTURAPYMES es un software de libre distribución, que puede ser
* copiado y distribuido bajo los términos de la Licencia
* Attribution-NonCommercial-NoDerivs 3.0 Unported,
* de acuerdo con la publicada por la CREATIVE COMMONS CORPORATION.
*/

package com.far.aus.adm.pdf;

import com.far.aus.adm.clas.Auspicio;
import com.far.lib.Pdf;

import com.lowagie.text.pdf.*;
import com.lowagie.text.*;

import java.io.*;
import java.sql.ResultSet;

import javax.servlet.*;
import javax.servlet.http.*;

/**
 *
 * @author Jorge
 */
public class PdfAuspicio extends HttpServlet {
    private String _ip = null;
    private int _puerto = 5432;
    private String _db = null;
    private String _usuario = null;
    private String _clave = null;
    
    private String _dir = null;

    public void init(ServletConfig config) throws ServletException
    {
        this._ip = config.getServletContext().getInitParameter("_IP");
        this._puerto = Integer.parseInt(config.getServletContext().getInitParameter("_PUERTO"));
        this._db = config.getServletContext().getInitParameter("_DB");
        this._usuario = config.getServletContext().getInitParameter("_USUARIO");
        this._clave = config.getServletContext().getInitParameter("_CLAVE");
        
        this._dir = config.getServletContext().getInitParameter("_DIR");
    }

    
    class AuspicioPdf extends PdfPageEventHelper
    {
        public AuspicioPdf(){}

        public void imprimir(HttpServletResponse response, ResultSet rsA, ResultSet rsAc, int copias){
            response.setContentType("application/pdf");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Expires", "Mon, 01 Jan 2001 00:00:01 GMT");
            response.setHeader("Cache-Control", "no-store");
            response.setHeader("Cache-Control", "must-revalidate");
            response.setHeader("Cache-Control", "no-cache");

            //_dir = "/home/desarrollo/Documentos/saitel/web/img/";
            
            /* inicio PDF */
            Document document = new Document(PageSize.A4);// paso 1
            document.setMargins(10,0,40,10); /*Izquierda, derecha, tope, pie */

            try {
                PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream()); // paso 2

                document.open(); // paso 3

                writer.addJavaScript("this.print(false);", false); // Para enviar a la impresora automÃ¡ticamente.

                /* todo el cuerpo del doc es el paso 4 */

                PdfPTable tbl_cab = new PdfPTable(new float[]{25,60});
                PdfPTable tbl_pie = new PdfPTable(new float[]{25,60});
                
                tbl_cab.addCell(Pdf.setCeldaPDF("Convenio de Auspicio", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 0, 3, 4));
                try{
                    if(rsA.next()){
                        tbl_cab.addCell(Pdf.setCeldaPDF("Nro. de auspicio " + (rsA.getString("num_auspicio")!=null ? rsA.getString("num_auspicio") : ""), Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_RIGHT, 0, 3, 2));

                        tbl_cab.addCell(Pdf.setFilaBlanco(2, 15));
                        
                        tbl_cab.addCell(Pdf.setCeldaPDF("Tipo de plan de mercadeo:", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        tbl_cab.addCell(Pdf.setCeldaPDF((rsA.getString("tipo_plan")!=null ? rsA.getString("tipo_plan") : ""), Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        
                        tbl_cab.addCell(Pdf.setCeldaPDF("Fecha de creación:", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        tbl_cab.addCell(Pdf.setCeldaPDF((rsA.getString("txt_fecha_creacion")!=null ? rsA.getString("txt_fecha_creacion") : ""), Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));


                        tbl_cab.addCell(Pdf.setCeldaPDF("Proveedor:", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        tbl_cab.addCell(Pdf.setCeldaPDF((rsA.getString("proveedor")!=null ? rsA.getString("proveedor") : ""), Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));

                        tbl_cab.addCell(Pdf.setCeldaPDF("Contacto:", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        tbl_cab.addCell(Pdf.setCeldaPDF((rsA.getString("contacto")!=null ? rsA.getString("contacto") : ""), Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        
                        tbl_cab.addCell(Pdf.setCeldaPDF((rsA.getString("tipo_documento")!=null ? (rsA.getString("tipo_documento").compareTo("02")==0 ? "Cédula:" : "Pasaporte:") : "Cédula:"), Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        tbl_cab.addCell(Pdf.setCeldaPDF((rsA.getString("cedula")!=null ? rsA.getString("cedula") : ""), Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        
                        tbl_cab.addCell(Pdf.setCeldaPDF("Correo:", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        tbl_cab.addCell(Pdf.setCeldaPDF((rsA.getString("correo")!=null ? rsA.getString("correo") : ""), Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        
                        tbl_cab.addCell(Pdf.setFilaBlanco(2, 12));
                        
                        tbl_cab.addCell(Pdf.setCeldaPDF("Plan de Actividades Promocionales:", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 3, 2));
                        
                        
                        tbl_pie.addCell(Pdf.setFilaBlanco(2, 12));
                        
                        tbl_pie.addCell(Pdf.setCeldaPDF("Fecha de Pago:", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        tbl_pie.addCell(Pdf.setCeldaPDF((rsA.getString("dias_para_vencimiento")!=null ? rsA.getString("dias_para_vencimiento") : "") + " días", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        
                        tbl_pie.addCell(Pdf.setCeldaPDF("Observaciones:", Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                        tbl_pie.addCell(Pdf.setCeldaPDF((rsA.getString("observacion")!=null ? rsA.getString("observacion") : ""), Font.HELVETICA, 10, Font.NORMAL, Element.ALIGN_LEFT, 0));
                    }
                }catch(Exception e){
                    e.printStackTrace();
                }
                
                
                
                
                PdfPTable tbl_det = new PdfPTable(new float[]{60,30,30,20,25,25,25,30});
                tbl_det.addCell(Pdf.setCeldaPDF("Plan de Actividades", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 1));
                tbl_det.addCell(Pdf.setCeldaPDF("Desde", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 1));
                tbl_det.addCell(Pdf.setCeldaPDF("Hasta", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 1));
                tbl_det.addCell(Pdf.setCeldaPDF("Graba IVA", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 1));
                tbl_det.addCell(Pdf.setCeldaPDF("Sub-Total", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 1));
                tbl_det.addCell(Pdf.setCeldaPDF("IVA", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 1));
                tbl_det.addCell(Pdf.setCeldaPDF("Total", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 1));
                tbl_det.addCell(Pdf.setCeldaPDF("Forma de Pago", Font.HELVETICA, 10, Font.BOLD, Element.ALIGN_CENTER, 1));
                try{
                    while(rsAc.next()){
                        tbl_det.addCell(Pdf.setCeldaPDF((rsAc.getString("plan_actividad")!=null ? rsAc.getString("plan_actividad") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_LEFT, 1));
                        tbl_det.addCell(Pdf.setCeldaPDF((rsAc.getString("txt_fecha_desde")!=null ? rsAc.getString("txt_fecha_desde") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_LEFT, 1));
                        tbl_det.addCell(Pdf.setCeldaPDF((rsAc.getString("txt_fecha_hasta")!=null ? rsAc.getString("txt_fecha_hasta") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_LEFT, 1));
                        tbl_det.addCell(Pdf.setCeldaPDF((rsAc.getString("graba_iva")!=null ? rsAc.getString("graba_iva") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_CENTER, 1));
                        tbl_det.addCell(Pdf.setCeldaPDF((rsAc.getString("subtotal")!=null ? rsAc.getString("subtotal") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_RIGHT, 1));
                        tbl_det.addCell(Pdf.setCeldaPDF((rsAc.getString("iva")!=null ? rsAc.getString("iva") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_RIGHT, 1));
                        tbl_det.addCell(Pdf.setCeldaPDF((rsAc.getString("total")!=null ? rsAc.getString("total") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_RIGHT, 1));
                        tbl_det.addCell(Pdf.setCeldaPDF((rsAc.getString("forma_pago")!=null ? rsAc.getString("forma_pago") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_LEFT, 1));
                    }
                    tbl_det.addCell(Pdf.setCeldaPDF(" ", Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_RIGHT, 0, 3, 3));
                    tbl_det.addCell(Pdf.setCeldaPDF("Total", Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_CENTER, 0));
                    tbl_det.addCell(Pdf.setCeldaPDF((rsA.getString("subtotal")!=null ? rsA.getString("subtotal") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_RIGHT, 0));
                    tbl_det.addCell(Pdf.setCeldaPDF((rsA.getString("iva")!=null ? rsA.getString("iva") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_RIGHT, 0));
                    tbl_det.addCell(Pdf.setCeldaPDF((rsA.getString("total")!=null ? rsA.getString("total") : ""), Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_RIGHT, 0));
                    tbl_det.addCell(Pdf.setCeldaPDF(" ", Font.HELVETICA, 9, Font.NORMAL, Element.ALIGN_LEFT, 0));
                }catch(Exception e){
                    e.printStackTrace();
                }
                
                
                for(int i=0; i<copias; i++){
                    document.add(tbl_cab);
                    document.add(tbl_det);
                    document.add(tbl_pie);
                    document.newPage();
                }
                

            }catch(IllegalStateException ie){
                ie.printStackTrace();
            }catch(DocumentException de){
                de.printStackTrace();
            }catch(Exception e){
                e.printStackTrace();
            }
            
            document.close(); // paso 5
            /* fin PDF */
        }
        
    }

    class AuspicioPdfLeer extends PdfPageEventHelper
    {
        public AuspicioPdfLeer(){}
        
        public void imprimir(HttpServletResponse response, String num_auspicio, int copias)
        {
            response.setContentType("application/pdf");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Expires", "Mon, 01 Jan 2001 00:00:01 GMT");
            response.setHeader("Cache-Control", "no-store");
            response.setHeader("Cache-Control", "must-revalidate");
            response.setHeader("Cache-Control", "no-cache");
            
            Document document = new Document(PageSize.A4);// paso 1
            try {
                PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream()); // paso 2

                document.open(); // paso 3

                writer.addJavaScript("this.print(false);", false); // Para enviar a la impresora automÃ¡ticamente.
                
                // Load existing PDF
                File archivoAuspicio = new File(_dir + "Auspicio_Nro_" + num_auspicio + ".pdf");
                InputStream in = new BufferedInputStream(new FileInputStream(archivoAuspicio));
                PdfReader reader = new PdfReader(in);
                int numPags = reader.getNumberOfPages();
                
                for(int i=0; i<copias; i++){
                    for(int j=1; j<=numPags; j++){
                        PdfImportedPage pag = writer.getImportedPage(reader, j);
                        document.newPage();
                        PdfContentByte cb = writer.getDirectContent();
                        cb.addTemplate(pag, 0, 0);
                    }
                }
                
                document.close();
                
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    }
    
    /**
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
    * @param request servlet request
    * @param response servlet response
    */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("application/pdf");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Expires", "Mon, 01 Jan 2001 00:00:01 GMT");
        response.setHeader("Cache-Control", "no-store");
        response.setHeader("Cache-Control", "must-revalidate");
        response.setHeader("Cache-Control", "no-cache");

        String num_auspicio = request.getParameter("pk");
        String copias = request.getParameter("copias");
        
        Auspicio objAuspicio = new Auspicio(this._ip, this._puerto, this._db, this._usuario, this._clave);
        
        ResultSet rsAuspicio = objAuspicio.getAuspicio(num_auspicio);
        ResultSet rsActividades = objAuspicio.getPlanActividades(num_auspicio);
        
        AuspicioPdfLeer pdf = new AuspicioPdfLeer();
        pdf.imprimir(response, num_auspicio, Integer.parseInt(copias));

        try{
            rsAuspicio.close();
            rsActividades.close();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            objAuspicio.cerrar();
        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
